In order to look for errors in software programs (an activity referred to as “debugging”), some software development tools provide the ability to record the sequence of operations that a processor performed while executing a program. This is referred to as tracing the execution of the program, and the information that is captured is referred to as trace data. The trace data may comprise data such as addresses of the sequence of operational codes (opcodes) executed by the processor, values of various processor registers at each executed opcode, and information in log files written by the traced program.
Some traced programs, however, use overlays and dynamically linked library (DLL) programs. Overlays are sequences of code and/or data bytes that are stored in slower (and thus less expensive) memory and are linked to run at a common address range in faster (and thus more expensive) memory, called an ‘overlay region’. When a program determines that it needs access to the content associated with an overlay, the program copies the overlay into the faster memory so that that overlay aligns with the addresses at which the overlay was configured to run. Overlays are used in time-critical applications where deterministic operation of the program is required, deterministic in this case refers to the ability of the programmer to determine ahead of time the worst-case path through a program, how much time it will take to execute the worst case path, and thus to determine the longest amount of time to execute the code. The hardware cache systems found in modern processors are often unsuitable for situations where determinism is needed because interrupts, task switches or other events that occur during the execution of a program evict various address regions from cache, causing the instructions of the evicted addresses to execute more slowly the next time they are accessed.
In systems using overlays, over time a plurality of overlay programs may execute from the same series of addresses. For a trace-debug program looking only at the sequence of addresses executed by the processor it is difficult to determine which overlay was executed. Similarly, DLL programs are linked at run time, and thus the addresses of the instructions of a DLL program are not known until run time, making it difficult for a trace-debug program to know which DLL program was executed just by looking at the series of executed addresses of trace data.